﻿using log4net;
using PcaCore.DAL;
using PcaParqueos.BOL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace PcaParqueos.DAL
{
    public class dPagoAbonado
    {
        private static ILog log = LogManager.GetLogger(typeof(dPagoAbonado));

        #region Public

        public static long EmitirComprobante(string empresaId,
                                             string oficinaId,
                                             long liquidacionId,
                                             string usuarioId,
                                             long abonadoId,
                                             long clienteId,
                                             long sesionId,
                                             string detalle,
                                             string medioPagoId,
                                             string monedaId,
                                             decimal precioVenta,
                                             decimal efectivoPercibido)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_parqueos.fn_emitir_comprobante_abonado(varchar,--empresa_id $1
                //                      varchar,--oficina_id $2
                //                      bigint,--liquidacion_id $3
                //                      character,--usuario_id $4
                //                      bigint,--abonado_id $5
                //                      bigint,--cliente_id $6
                //                      bigint,--sesion_id $7
                //                      text,--detalle $8
                //                      varchar,--medio_pago_id $9
                //                      varchar,--moneda_id $10
                //                      numeric,--precio_venta $11
                //                      numeric --efectivo_percibido $12
                //                      )RETURNS bigint
                object id = Core.ExecuteScalar("pca_parqueos.fn_emitir_comprobante_abonado",
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, oficinaId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, liquidacionId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, usuarioId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, abonadoId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, clienteId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, sesionId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Text, detalle),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, medioPagoId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, monedaId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Numeric, precioVenta),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Numeric, efectivoPercibido));

                return Convert.ToInt64(id);  
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name);
            }
        }

        public static List<oVwPagoAbonado> GetList(int start,
                                                   int limit,
                                                   out int totalRecords,
                                                   string empresaId,
                                                   string oficinaId,
                                                   long abonadoId,
                                                   string filtro)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_parqueos.fn_get_list_pagos_abonados(integer,--start $1
                //                   integer,--limit $2
                //                   varchar,--empresa_id $3
                //                   varchar,--oficina_id $4
                //                   bigint,--abonado_id $5
                //                   varchar --filtro(detalle) $6
                //                   )RETURNS SETOF refcursor
                return Core.GetListObjecstDb<oVwPagoAbonado>("pca_parqueos.fn_get_list_pagos_abonados",
                                                             out totalRecords, 
                                                             new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, start),
                                                             new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, limit),
                                                             new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId),
                                                             new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, oficinaId),
                                                             new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, abonadoId),
                                                             new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, filtro)); 
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name); 
            }
        }

        #endregion
    }
}
